@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion

REM Docker构建脚本 (Windows版本)
REM 作者: auth-cloud
REM 日期: 2024-01-01

REM 项目根目录
set "PROJECT_ROOT=%~dp0.."
set "PROJECT_ROOT=%PROJECT_ROOT:~0,-1%"
echo 项目根目录: %PROJECT_ROOT%

REM 检查Docker环境
:check_docker
docker --version >nul 2>&1
if errorlevel 1 (
    echo 错误: 未找到Docker环境，请先安装Docker
    exit /b 1
)

docker-compose --version >nul 2>&1
if errorlevel 1 (
    echo 错误: 未找到Docker Compose环境，请先安装Docker Compose
    exit /b 1
)

echo Docker环境检查通过

REM 编译项目
:build_project
echo 开始编译项目...
cd /d "%PROJECT_ROOT%"
call mvn clean package -DskipTests
if errorlevel 1 (
    echo 项目编译失败
    exit /b 1
)
echo 项目编译成功

REM 构建Docker镜像
:build_images
echo 开始构建Docker镜像...

echo 构建网关服务镜像...
docker build -f Dockerfile.gateway -t auth-cloud/gateway:1.0.0 .

echo 构建注册中心服务镜像...
docker build -f Dockerfile.registry -t auth-cloud/registry:1.0.0 .

echo 构建认证服务镜像...
docker build -f Dockerfile.auth-service -t auth-cloud/auth-service:1.0.0 .

echo 构建用户服务镜像...
docker build -f Dockerfile.user-service -t auth-cloud/user-service:1.0.0 .

echo 所有Docker镜像构建完成

REM 启动开发环境
:start_dev
echo 启动开发环境...
cd /d "%PROJECT_ROOT%"
docker-compose -f docker-compose.dev.yml up -d
echo 开发环境启动完成

REM 停止开发环境
:stop_dev
echo 停止开发环境...
cd /d "%PROJECT_ROOT%"
docker-compose -f docker-compose.dev.yml down
echo 开发环境已停止

REM 启动生产环境
:start_prod
echo 启动生产环境...
cd /d "%PROJECT_ROOT%"
docker-compose up -d
echo 生产环境启动完成

REM 停止生产环境
:stop_prod
echo 停止生产环境...
cd /d "%PROJECT_ROOT%"
docker-compose down
echo 生产环境已停止

REM 查看服务状态
:status
echo 服务状态:
docker-compose ps

REM 查看日志
:logs
set "service=%~1"
if "%service%"=="" (
    echo 所有服务日志:
    docker-compose logs -f
) else (
    echo 服务 %service% 日志:
    docker-compose logs -f %service%
)

REM 清理资源
:clean
echo 清理Docker资源...

REM 停止并删除容器
docker-compose down

REM 删除镜像
docker rmi auth-cloud/gateway:1.0.0 2>nul
docker rmi auth-cloud/registry:1.0.0 2>nul
docker rmi auth-cloud/auth-service:1.0.0 2>nul
docker rmi auth-cloud/user-service:1.0.0 2>nul

REM 清理未使用的资源
docker system prune -f

echo Docker资源清理完成

REM 显示帮助信息
:show_help
echo.
echo 用法: %~nx0 [命令]
echo.
echo 命令:
echo   build         编译项目并构建Docker镜像
echo   start-dev     启动开发环境 (仅基础服务)
echo   stop-dev      停止开发环境
echo   start-prod    启动生产环境 (所有服务)
echo   stop-prod     停止生产环境
echo   restart-prod  重启生产环境
echo   status        查看服务状态
echo   logs [服务名] 查看服务日志
echo   clean         清理Docker资源
echo   help          显示帮助信息
echo.
echo 服务名:
echo   mysql         MySQL数据库
echo   redis         Redis缓存
echo   nacos         Nacos注册中心
echo   gateway       网关服务
echo   registry      注册中心服务
echo   auth-service  认证服务
echo   user-service  用户服务

REM 主函数
:main
if "%1"=="build" goto build
if "%1"=="start-dev" goto start_dev_cmd
if "%1"=="stop-dev" goto stop_dev_cmd
if "%1"=="start-prod" goto start_prod_cmd
if "%1"=="stop-prod" goto stop_prod_cmd
if "%1"=="restart-prod" goto restart_prod_cmd
if "%1"=="status" goto status_cmd
if "%1"=="logs" goto logs_cmd
if "%1"=="clean" goto clean_cmd
if "%1"=="help" goto show_help
if "%1"=="-h" goto show_help
if "%1"=="--help" goto show_help
goto show_help

:build
call :check_docker
call :build_project
call :build_images
goto end

:start_dev_cmd
call :check_docker
call :start_dev
goto end

:stop_dev_cmd
call :stop_dev
goto end

:start_prod_cmd
call :check_docker
call :start_prod
goto end

:stop_prod_cmd
call :stop_prod
goto end

:restart_prod_cmd
call :stop_prod
timeout /t 5 /nobreak >nul
call :start_prod
goto end

:status_cmd
call :status
goto end

:logs_cmd
call :logs "%2"
goto end

:clean_cmd
call :clean
goto end

:end
endlocal
